// Magic Token 处理函数
// 用于处理激励视频相关的token加密

/**
 * 生成Magic Token
 * @param {string} t - 原始token，长度必须为256
 * @param {string} s - voice_sign，长度必须为5
 * @returns {string} 处理后的magic token
 */
function makeMagicToken(t, s) {
  if (t.length !== 256 || s.length !== 5) throw "len err";
  let x = 5381; 
  for (let c of s) x = ((x << 5) + x + c.charCodeAt(0)) >>> 0;
  let u = new Set(), p = [], min = 31, max = 226, span = max - min + 1;
  while (p.length < 5) {
    x ^= x << 13; 
    x ^= x >>> 17; 
    x ^= x << 5; 
    x >>>= 0;
    let q = min + (x % span); 
    while (u.has(q)) q = min + ((q + 1 - min) % span);
    u.add(q); 
    p.push(q);
  }
  p.sort((a, b) => a - b);
  let a = t.split(""); 
  for (let i = 0; i < 5; i++) a[p[i]] = s[i];
  return a.join("");
}

// 导出函数供其他页面使用
export { makeMagicToken }

// 默认导出
export default {
  makeMagicToken
}
